﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
using System.Drawing.Imaging;

namespace RFPL
{
    class ImageUtils
    {

        public static byte[] ImageToByteArray(Image Image)
        {

            //Проверим, что изображение не нулевое
            if (Image == null)
            {
                throw new ArgumentNullException("Image");
            }

            //Подготовим поток для сохранения в него изображения
            System.IO.MemoryStream ImageStream = new System.IO.MemoryStream();

            if (ImageFormat.Jpeg.Equals(Image.RawFormat))
            {
                //Сохраним изображение в этот поток
                Image.Save(ImageStream, System.Drawing.Imaging.ImageFormat.Jpeg);
            }
            else if (ImageFormat.Png.Equals(Image.RawFormat))
            {
                //Сохраним изображение в этот поток
                Image.Save(ImageStream, System.Drawing.Imaging.ImageFormat.Png);
            }
            
            //Считаем из потока байты
            byte[] ImageBytes = ImageStream.ToArray();

            //Закроем временный поток
            ImageStream.Close();

            //Вернем массив байтов
            return ImageBytes;

        }

        public static Image ByteArrayToImage(byte[] ImageBytes)
        {

            //Подготовим временный поток для чтения массива байтов
            System.IO.MemoryStream ImageStream = new System.IO.MemoryStream(ImageBytes);

            //Создадим изображение из потока
            Image Image = Image.FromStream(ImageStream);

            //Закроем поток
            ImageStream.Close();

            //Вернем изображение
            return Image;

        }

        public static void setImageFromStream(PictureBox pb)
        {
            System.IO.Stream myStream = null;

            OpenFileDialog openFileDialog1 = new OpenFileDialog();

            openFileDialog1.DefaultExt = ".png";
            openFileDialog1.Filter = "JPEG Files (*.jpeg)|*.jpeg|PNG Files (*.png)|*.png";
            openFileDialog1.FilterIndex = 2;
            openFileDialog1.RestoreDirectory = true;

            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    if ((myStream = openFileDialog1.OpenFile()) != null)
                    {
                        using (myStream)
                        {
                            pb.Image = Image.FromStream(myStream);
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
                }
            }

        }
    }
}
